/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia.daos;

import Persistencia.CRUD;
import Persistencia.DAO;
import Persistencia.SeqHelper;
import Persistencia.modelos.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author Bruno
 */
public class TimeDAO implements DAO<Integer, Time> {

    public void salva(Time obj) {       
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            String tecnico = (obj.getTecnico()==null)?"null":String.valueOf(obj.getTecnico().getIdPessoa());            
            int i = SeqHelper.getId("time");
            CRUD.adiciona("time", "idtime, idtecnico,datafundacao,nometime", i + ", " + tecnico + ",'" + sdf.format(obj.getDataFundacao()) + "' , '" + obj.getNomeTime() + "'");                    
            obj.setIdTime(i);
    }

    public void atualiza(Time obj) {
        List<String> c = new ArrayList<String>();
        // c.add("IDTIME");
        c.add("IDTECNICO");
        c.add("DATAFUNDACAO");
        c.add("NOMETIME");
        List<String> a = new ArrayList<String>();
        a.add(String.valueOf(obj.getTecnico().getIdPessoa()));
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        a.add("'" + sdf.format(obj.getDataFundacao()) + "'");
        a.add("'" + obj.getNomeTime()+ "'");
        // a.add("'"+sdf.format(obj.getDataNascPessoa())+"'");
        CRUD.atualiza("time", c, a, " where IDTIME = " + obj.getIdTime());

    }

    public void deleta(Integer obj) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(obj);
        String campo = "idtime";
        CRUD.deleta("time", campo, list);
    }

    public Time recupera(Integer obj) {
        try {
            Collection<Time> times = new ArrayList<Time>();
            TecnicoDAO dao = new TecnicoDAO(); 
            ResultSet rs = CRUD.consulta("select * from Time  where idtime = " + obj);
            Time a = null;
            Collection<Integer> ints = new ArrayList<Integer>();
            if (rs.next()){
            a = new Time();
                a.setIdTime(rs.getInt("IDTIME"));
                a.setIdTecnico(rs.getInt("IDTECNICO"));
                a.setDataFundacao(rs.getDate("DATAFUNDACAO"));
                a.setNomeTime(rs.getString("NOMETIME"));
                ints.add(a.getIdTecnico());
            }
            
            Collection<Tecnico> lista = dao.recuperaLista(ints);
                        
            for(Tecnico tecnico: lista){
                if (a.getIdTecnico() == tecnico.getIdPessoa()) {
                    a.setTecnico(tecnico);
                }                        
            }
                        
            return a;
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }
    }

    public Collection<Time> recuperaLista(Collection<Integer> chaves) {
        try {
            StringBuilder sb = new StringBuilder();
            Iterator<Integer> it = chaves.iterator();
            while (it.hasNext()) {
                sb.append(it.next()).append(",");
            }
            String ids = sb.toString().substring(0, sb.toString().length() - 1);

            TecnicoDAO dao = new TecnicoDAO(); 
            Collection<Time> Times = new ArrayList<Time>();
            Collection<Integer> ints = new ArrayList<Integer>();
            ResultSet rs = CRUD.consulta("select * from Time  where idtime in (" + ids + ")");
            while (rs.next()) {
                Time a = new Time();
                a.setIdTime(rs.getInt("IDTIME"));
                a.setIdTecnico(rs.getInt("IDTECNICO"));
                a.setDataFundacao(rs.getDate("DATAFUNDACAO"));
                a.setNomeTime(rs.getString("NOMETIME"));
                ints.add(a.getIdTecnico());
                Times.add(a);
            }
            Collection<Tecnico> lista = dao.recuperaLista(ints);
            
            for (Time time : Times) {
                for(Tecnico tecnico: lista){
                    if (time.getIdTecnico() == tecnico.getIdPessoa()) {
                        time.setTecnico(tecnico);
                    }                        
                }
            }            
            return Times;
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }
    }

    public Collection<Time> recuperaTodos() {
        try {
            Collection<Time> Times = new ArrayList<Time>();            
            TecnicoDAO dao = new TecnicoDAO();             
            ResultSet rs = CRUD.consulta("select * from Time");            
            Collection<Integer> ints = new ArrayList<Integer>();
            while (rs.next()) {
                Time a = new Time();
                a.setIdTime(rs.getInt("IDTIME"));
                a.setIdTecnico(rs.getInt("IDTECNICO"));
                a.setDataFundacao(rs.getDate("DATAFUNDACAO"));
                a.setNomeTime(rs.getString("NOMETIME"));                
                ints.add(rs.getInt("IDTECNICO"));
                Times.add(a);
            }            
            Collection<Tecnico> lista = dao.recuperaLista(ints);
            
            for (Time time : Times) {
                for(Tecnico tecnico: lista){
                    if (time.getIdTecnico() == tecnico.getIdPessoa()) {
                        time.setTecnico(tecnico);
                    }                        
                }
            }
            
            return Times;
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }
    }

    }
